package su.camunda.operate;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.jupiter.api.Test;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

public class JsonCompare {



    @Test
    public void test1() {

        String oldStr = FileUtil.readString(this.getClass().getClassLoader().getResource("old.json").getPath(), "utf8");
        String newStr = FileUtil.readString(this.getClass().getClassLoader().getResource("new.json").getPath(), "utf8");

        List<FileItem> oldObjList = JSONUtil.toList(oldStr, FileItem.class);
        List<FileItem> newObjList = JSONUtil.toList(newStr, FileItem.class);

        List<String> fileNames = new ArrayList<>();
        for (FileItem fileItem : oldObjList) {

            Integer appId = fileItem.getExtract_config().getAppId();
            String file_name = fileItem.getFile_name();
            newObjList.stream().filter(item->item.getExtract_config().getAppId().equals(appId)).filter(item->!item.getFile_name().equals(file_name)).forEach(item->{
                System.out.println(JSONUtil.toJsonStr(item));
                fileNames.add(item.getFile_name());
            });

        }

        System.out.println(JSONUtil.toJsonStr(fileNames));
    }

    @Test
    public void test2() {
        String oldStr = FileUtil.readString(this.getClass().getClassLoader().getResource("wiki.json").getPath(), "utf8");
        List<Page> pages = JSONUtil.toList(oldStr, Page.class);
        pages.sort(Comparator.comparing(Page::getId).reversed());
        System.out.println(JSONUtil.toJsonStr(pages));
    }


    @Test
    public void test3() throws IOException {
        String name = "model.json";
        String file = "model_result.json";
        String oldStr = FileUtil.readString(this.getClass().getClassLoader().getResource(name).getPath(), "utf8");
        JSONArray objects = JSONUtil.parseArray(oldStr);
        List<JSONObject> jsonObjects = new ArrayList<>();
        for (Object object : objects) {
            JSONObject jsonObject = ((JSONObject) object);
            // 将json中的key从下划线转换为驼峰
            JSONObject jsonObject1= JSONUtil.createObj();
            jsonObject.keySet().forEach(key -> {
                jsonObject1.set(StrUtil.toCamelCase(key.toLowerCase()), jsonObject.get(key));
            });
            jsonObjects.add(jsonObject1);
        }
        System.out.println(JSONUtil.toJsonStr(jsonObjects));
        // 将jsonObjects写入文件
        FileUtil.writeString(JSONUtil.toJsonStr(jsonObjects), this.getClass().getClassLoader().getResource(file).getPath(), "utf8");
    }

    @Test
    public void test4() {
        String first = "发行人设立以来至今历次工商信息变更记录查询文件\n" +
                "发行人股权结构图、股东名册\n" +
                "发行人关于历史沿革的说明\n" +
                "发行人关于拟发行债券的说明\n" +
                "发行人董事、监事、高级管理人员任职文件\n" +
                "发行人关于本次债券发行的董事会决议\n" +
                "发行人前次发行债券募集资金使用的借款合同\n" +
                "自然人控股股东身份证明文件\n" +
                "自然人实际控制人身份证明文件\n" +
                "发行人营业执照\n" +
                "法人控股股东营业执照\n" +
                "法人主管部门营业执照\n" +
                "审计机构营业执照\n" +
                "法人实际控制人营业执照\n" +
                "保证人营业执照\n" +
                "承销商营业执照\n" +
                "会计师事务所构营业执照\n" +
                "律师事务所营业执照\n" +
                "终止重大资产重组的公告\n" +
                "重大资产重组涉及的资产评估报告\n" +
                "债务加入方评级报告\n" +
                "保证人评级报告\n" +
                "评级报告\n" +
                "评级机构营业执照\n" +
                "评估机构营业执照\n" +
                "其他主承销商营业执照\n" +
                "受托管理人营业执照\n" +
                "第三方营业执照副本\n" +
                "批文\n" +
                "发行人公司章程";
        String second = "发行人设立以来至今历次工商信息变更记录查询文件\n" +
                "发行人原始工商登记文件\n" +
                "发行人关于历史沿革的说明\n" +
                "发行人营业执照\n" +
                "对发行人股权结构的查询文件\n" +
                "发行人股权结构图、股东名册\n" +
                "非公司制发行人的主管部门信息\n" +
                "自然人控股股东简历\n" +
                "自然人控股股东身份证明文件\n" +
                "法人控股股东简介\n" +
                "对法人控股股东的工商信息查询文件\n" +
                "法人控股股东营业执照\n" +
                "控股股东财务报告\n" +
                "控股股东持有发行人股权质押、冻结等情况查询文件\n" +
                "控股股东对其他企业进行投资情况的查询文件\n" +
                "控股股东与其他主要股东关系的查询文件\n" +
                "关于发行人控股股东的核查说明\n" +
                "对控股股东违法违规及失信情况的查询文件\n" +
                "对控股股东债务违约情况的查询文件\n" +
                "对控股股东负面舆情及诉讼情况的查询文件\n" +
                "关于发行人控股股东诚信情况的核查问询函\n" +
                "对发行人控股股东的核查意见\n" +
                "法人主管部门简介\n" +
                "法人主管部门营业执照\n" +
                "对法人主管部门的工商信息查询文件\n" +
                "法人主管部门财务报告\n" +
                "主管部门对发行人出资的质押、冻结等情况查询文件\n" +
                "对法人主管部门对其他企业进行出资情况的查询文件\n" +
                "关于发行人主管部门的核查说明\n" +
                "对主管部门违法违规及失信情况的查询文件\n" +
                "对主管部门债务违约情况的查询文件\n" +
                "对主管部门负面舆情及诉讼情况的查询文件\n" +
                "关于发行人主管部门诚信情况的核查问询函\n" +
                "对发行人主管部门（出资人）的核查意见\n" +
                "自然人实际控制人简历\n" +
                "自然人实际控制人身份证明文件\n" +
                "法人实际控制人简介\n" +
                "法人实际控制人营业执照\n" +
                "对法人实际控制人的工商信息查询文件\n" +
                "法人实际控制人财务报告\n" +
                "实际控制人持有发行人股权质押、冻结等情况查询文件\n" +
                "关于发行人实际控制人的核查说明\n" +
                "实际控制人对其他企业进行投资情况的查询文件\n" +
                "实际控制人与其他主要股东关系的查询文件\n" +
                "对实际控制人违法违规及失信情况的查询文件\n" +
                "对实际控制人债务违约情况的查询文件\n" +
                "关于发行人实际控制人诚信情况的核查问询函\n" +
                "对实际控制人负面舆情及诉讼情况的查询文件\n" +
                "对发行人实际控制人的核查意见\n" +
                "重大资产重组的报告文件（或方案）\n" +
                "终止重大资产重组的公告（或说明）\n" +
                "发行人关于重大资产重组的相关决议\n" +
                "重大资产重组涉及的资产评估报告\n" +
                "关于重大资产重组的审计报告\n" +
                "关于重大资产重组的备考财务报告\n" +
                "发行人关于重大资产重组的影响说明\n" +
                "发行人财务报告\n" +
                "发行人重要子公司、重要参股公司的名单\n" +
                "对发行人投资控股型架构的的分析\n" +
                "发行人公司（企业）章程\n" +
                "发行人董事、监事、高级管理人员任职文件\n" +
                "发行人董事、监事、高级管理人员名单\n" +
                "对董监高合法合规及失信行为公开查询文件\n" +
                "发行人董监高人员违法违规及诚信情况汇总表\n" +
                "发行人设立以来至今历次工商信息变更记录查询文件\n" +
                "关于对发行人董事、监事、高级管理人员任职情况的分析\n" +
                "关于发行人所处行业的认定分析\n" +
                "发行人内部管理制度文件";


        System.out.println("1020 =======");

        List<String> list1 = Arrays.asList(first.split("\n"));
        List<String> list2 = Arrays.asList(second.split("\n"));
        CollUtil.subtract(list2,list1);
        String collect = list2.stream().collect(Collectors.joining("\n"));
        System.out.println(collect);

    }

}
